package com.wc.fortnight_blue_bridge.Q16模拟一.L_最大勾;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.io.InputStreamReader;

public class Main {
    /**
     * 【问题描述】
     * 小蓝有一个长度为 n 的整数序列 a[1], a[2], ..., a[n] 。
     * 他希望从中找出一个最长的子序列，形成一个勾的形状（√）。
     * 即找到 1 <= p[1] < p[2] < ... < p[k] <= n，满足 a[p[1]] > a[p[2]] > a[p[3]] > ... > a[p[x]] < a[p[x+1]] < ... < a[p[k]] 。其中 k 是子序列的长度，x 是勾中最小的位置。目标是使得 k 最大。
     * 请找出最大的勾的长度。
     *
     * 【输入格式】
     * 输入的第一行包含一个整数 n 。
     * 第二行包含 n 个整数，相邻数之间使用一个空格分隔，依次表示 a[1], a[2], ..., a[n] 。
     *
     * 【输出格式】
     * 输出一行，包含一个整数，表示答案。
     *
     * 【样例输入】
     * 10
     * 2 1 4 7 4 8 3 6 4 7
     * 【样例输出】
     * 5
     * 【样例说明】
     * 当 p = (4,5,7,9,10) 时，a[4] , a[5] , a[7] , a[9] , a[10] 可形成一个长度为 5 的勾：7,4,3,6,7。
     *
     * 【评测用例规模与约定】
     * 对于 30% 的评测用例，1 <= n <= 20 ， 1 <= a[i] <= 100 。
     * 对于 60% 的评测用例，1 <= n <= 100 ， 1 <= a[i] <= 1000 。
     * 对于所有评测用例，1 <= n <= 1000 ， 1 <= a[i] <= 10000 。
     */
    static FastReader sc = new FastReader();
    static PrintWriter out = new PrintWriter(System.out);
    static int N = 1010;
    static int[] a = new int[N];
    // l[i] 表示左边比自己小的最大长度
    static int[] l = new int[N], r = new int[N];
    static int n;

    public static void main(String[] args) {
        n = sc.nextInt();
        for (int i = 1; i <= n; i++) a[i] = sc.nextInt();

        for (int i = 1; i <= n; i++){
            l[i] = 1;
            for (int j = 1; j < i; j++){
                if (a[i] < a[j]) l[i] = Math.max(l[i], l[j] + 1);
            }
        }

        for (int i = n; i >= 1; i--){
            r[i] = 1;
            for (int j = n; j > i; j--){
                if (a[i] < a[j]) r[i] = Math.max(r[i], r[j] + 1);
            }
        }

        int res = 0;
        for (int i = 1; i <= n; i++){
            res = Math.max(res, l[i] + r[i] - 1);
        }
        out.println(res);
        out.flush();
    }
}

class FastReader{
    StringTokenizer st;
    BufferedReader br;

    FastReader(){
        br = new BufferedReader(new InputStreamReader(System.in));
    }


    String nextLine(){
        try {
            return br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    String next(){
        while (st == null || !st.hasMoreElements()){
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

    int nextInt(){
        return Integer.parseInt(next());
    }

    long nextLong(){
        return Long.parseLong(next());
    }

    boolean hasNext(){
        String s = null;
        while (st == null || !st.hasMoreElements()){
            s = nextLine();
            if (s == null) return false;
            st = new StringTokenizer(s);
        }
        return true;
    }
}
